package com.pkx.guide.timing;

import com.pkx.guide.info.service.TInfoGuidePublishService;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

@Component
@Slf4j
public class TaskInitializer {

//    @Resource
//    private DynamicTaskManager taskManager;

    @Resource
    private TInfoGuidePublishService tInfoGuidePublishService;

    @Resource
    private QianFengAutomatic qianFengAutomatic;

    // 服务启动时初始化所有任务
//    @Bean
//    public ApplicationRunner initTasks() {
//        return args -> {
//            qianFengAutomatic.autoPublishByDate();
//
//        };
//    }
//            // 获取当前时间（应用启动后，真正执行初始化逻辑时的时间）
//            LocalTime now = LocalTime.now();
//            String currentTime = now.format(DateTimeFormatter.ofPattern("HH:mm"));
//            log.info("应用启动，当前时间：{}，开始初始化任务", currentTime);
//
//            // 从数据库查询所有任务配置
//            TInfoGuidePublish tInfoGuidePublish2 = new TInfoGuidePublish();
//            tInfoGuidePublish2.setDelFlg(0);
//            tInfoGuidePublish2.setState(0);
//            tInfoGuidePublish2.setModeType(0);
//
//            List<TInfoGuidePublish> basePublishList = tInfoGuidePublishService.listByEntity(tInfoGuidePublish2);
//
//
//            log.info("查询到待初始化的任务数量：{}", basePublishList.size());
//
//            for (TInfoGuidePublish tInfoGuidePublish : basePublishList) {
//                TInfoGuidePublish currentTask = tInfoGuidePublish;
//                String taskId = currentTask.getId().toString();
//                String taskTimeStr = currentTask.getStartTimeScale(); // 任务时间（HH:mm）
//
//                // 解析任务时间
//                LocalTime taskTime;
//                try {
//                    taskTime = LocalTime.parse(taskTimeStr, DateTimeFormatter.ofPattern("HH:mm"));
//                } catch (DateTimeParseException e) {
//                    log.error("任务[{}]时间格式错误（必须为HH:mm），跳过初始化：{}", taskId, taskTimeStr);
//                    continue;
//                }
//
//
////                // 1. 定义任务执行逻辑（抽取为方法，避免重复代码）
////                Runnable task = createTask(currentTask);
////
//                // 2. 注册定时任务（确保未来时间能自动执行）
//                String cron = timeToCron(taskTimeStr);
////                taskManager.addTask(taskId, cron, task);
////                log.info("任务[{}]已注册定时执行，Cron表达式：{}，任务时间：{}", taskId, cron, taskTimeStr);
//
//                // 3. 启动时判断：若当前时间 >= 任务时间，立即执行一次（今天内的任务）
//                if (now.isAfter(taskTime) || now.equals(taskTime)) {
//                    log.info("任务[{}]当前时间（{}）已过任务时间（{}），立即执行一次", taskId, currentTime, taskTimeStr);
////                    CompletableFuture.runAsync(task);
//                } else {
//                    log.info("任务[{}]当前时间（{}）未到任务时间（{}），等待定时触发", taskId, currentTime, taskTimeStr);
//                }
//            }
//        };
//    }
//
//    // 抽取任务逻辑为单独方法，复用性更好
//    private Runnable createTask(TInfoGuidePublish currentTask) {
//        return () -> {
//            String taskId = currentTask.getId().toString();
//            LocalTime executeTime = LocalTime.now();
//            log.info("任务[{}]开始执行，时间：{}", taskId, executeTime.format(DateTimeFormatter.ofPattern("HH:mm")));
//            try {
//                qianFengAutomatic.autoPublishByDate();
//                log.info("任务[{}]执行成功", taskId);
//            } catch (Exception e) {
//                log.error("任务[{}]执行失败", taskId, e); // 用error级别+完整堆栈，更易排查
//            }
//        };
//    }
//
//    // 保持原有的Cron表达式生成方法
//    public static String timeToCron(String time) {
//        LocalTime localTime = LocalTime.parse(time, DateTimeFormatter.ofPattern("HH:mm"));
//        int currentMinute = localTime.getMinute();
//        int currentHour = localTime.getHour();
//
//        int targetMinute = currentMinute - 5;
//        int targetHour = currentHour;
//
//// 处理分钟为负数的情况（跨小时）
//        if (targetMinute < 0) {
//            targetMinute += 60; // 分钟加上60（例如 -5 + 60 = 55）
//            targetHour -= 1;    // 小时减1
//            // 处理小时为负数的情况（跨天，比如当前是0时，减1后为-1，需要转为前一天的23时）
//            if (targetHour < 0) {
//                targetHour = 23;
//                // 如果需要跨天，还需额外处理日期（cron表达式的日期字段可能需要调整）
//            }
//        }
//
//        return String.format("0 %d %d * * ?", targetMinute, targetHour);
//    }
}